<?php
namespace Amis\dataviewer;

use Amis\Basics\AmisBasics;

/**
 * 时间戳转日期
 */
class Date extends AmisBasics
{
    /**
     * 如果在 Table、Card 和 List 中，为"date"；在 Form 中用作静态展示，为"static-date"
     */
    public string $type = 'date';

    /**
     * 如果在 Table、Card 和 List 中，为"date"；在 Form 中用作静态展示，为"static-date"
     * @return $this
     */
    public function isStatic()
    {
        $this->type = 'static-date';
        return $this;
    }

    public function className(string $className)
    {
        $this->className = $className;
        return $this;
    }

    /**
     * 显示的日期数值
     * @param string $value
     * @return $this
     */
    public function value(string $value)
    {
        $this->value = $value;
        return $this;
    }

    /**
     * 在其他组件中，时，用作变量映射
     * @param string $name
     * @return $this
     */
    public function name(string $name)
    {
        $this->name = $name;
        return $this;
    }

    /**
     * 占位内容
     * @param string $placeholder
     * @return $this
     */
    public function placeholder(string $placeholder = '-')
    {
        $this->placeholder = $placeholder;
        return $this;
    }

    /**
     * 展示格式, 更多格式类型请参考 文档
     * https://momentjs.com/docs/#/displaying/format/
     * @param string $format
     * @return $this
     */
    public function format(string $format = 'YYYY-MM-DD')
    {
        $this->format = $format;
        return $this;
    }

    /**
     * 数据格式，默认为时间戳。更多格式类型请参考 文档
     * https://momentjs.com/docs/#/displaying/format/
     * @param string $valueFormat
     * @return $this
     */
    public function valueFormat(string $valueFormat = 'X')
    {
        $this->valueFormat = $valueFormat;
        return $this;
    }

    /**
     * 是否显示相对当前的时间描述，比如: 11 小时前、3 天前、1 年前等，fromNow 为 true 时，format 不生效。
     * @param bool $fromNow
     * @return $this
     */
    public function fromNow(bool $fromNow = true)
    {
        $this->fromNow = $fromNow;
        return $this;
    }

    /**
     * 更新频率， 默认为 1 分钟
     * @param int $updateFrequency
     * @return $this
     */
    public function updateFrequency(int $updateFrequency = 60000)
    {
        $this->updateFrequency = $updateFrequency;
        return $this;
    }
}